GList *foci;
GtkConstraintSolver *constraint_solver;
+ GdkToplevelLayout *layout;
} GtkWindowPrivate;
enum {
gtk_window_present_toplevel (GtkWindow *window)
{
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
- GdkToplevelLayout *layout;
GdkRectangle request;
GdkGeometry geometry;
GdkSurfaceHints flags;
if (!(flags & GDK_HINT_MIN_SIZE))
geometry.min_width = geometry.min_height = 1;
- layout = gtk_window_compute_layout (window, geometry.min_width, geometry.min_height);
+ if (!priv->layout)
+ priv->layout = gtk_window_compute_layout (window, geometry.min_width, geometry.min_height);
gdk_toplevel_present (GDK_TOPLEVEL (priv->surface),
request.width,
request.height,
- layout);
- gdk_toplevel_layout_unref (layout);
+ priv->layout);
}
static void
{
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
-
if (priv->surface && gdk_surface_get_mapped (priv->surface))
{
- GdkToplevelLayout *layout;
+ int min_width = 1;
+ int min_height = 1;
+
+ if (priv->layout)
+ {
+ min_width = gdk_toplevel_layout_get_min_width (priv->layout);
+ min_height = gdk_toplevel_layout_get_min_height (priv->layout);
+ }
+
+ g_clear_pointer (&priv->layout, gdk_toplevel_layout_unref);
+ priv->layout = gtk_window_compute_layout (window, min_width, min_height);
- layout = gtk_window_compute_layout (window, 1, 1);
gdk_toplevel_present (GDK_TOPLEVEL (priv->surface),
gdk_surface_get_width (priv->surface),
gdk_surface_get_height (priv->surface),
- layout);
- gdk_toplevel_layout_unref (layout);
+ priv->layout);
}
}
gboolean hints_changed; /* do we need to send these again */
GtkWindowLastGeometryInfo saved_last_info;
int current_width, current_height;
- GdkToplevelLayout *layout;
widget = GTK_WIDGET (window);
gtk_window_compute_configure_request (window, &new_request,
&new_geometry, &new_flags);
+ if (!(new_flags & GDK_HINT_MIN_SIZE))
+ new_geometry.min_width = new_geometry.min_height = 1;
+
+ g_clear_pointer (&priv->layout, gdk_toplevel_layout_unref);
+ priv->layout = gtk_window_compute_layout (window, new_geometry.min_width, new_geometry.min_height);
+
+
/* This check implies the invariant that we never set info->last
* without setting the hints and sending off a configure request.
*
* to postpone our configure request until later.
*/
info->last = saved_last_info;
+ g_clear_pointer (&priv->layout, gdk_toplevel_layout_unref);
gtk_widget_queue_resize (widget); /* might recurse for GTK_RESIZE_IMMEDIATE */
}
if (configure_request_pos_changed)
g_warning ("configure request position changed. This should not happen. Ignoring the position");
- layout = gtk_window_compute_layout (window, 1, 1);
gdk_toplevel_present (GDK_TOPLEVEL (priv->surface),
new_request.width, new_request.height,
- layout);
- gdk_toplevel_layout_unref (layout);
+ priv->layout);
}
else
{